home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 3.iso
/
bin
/
viewDT
< prev
next >
Wrap
Text File
|
1996-11-11
|
10KB
|
402 lines
#!/bin/ksh -p
# setup correct directory from which to run Developer Toolbox
dtdir="DT_utilities"
export PATH="/usr/bsd:/bin:/usr/bin:/usr/sbin:/usr/bin/X11"
fullprog=$0
typeset -r prog=${0##*/}
progdir=${0%/*}
if [[ "$progdir" = \/* ]]; then
typeset -r fullprogdir="$progdir"
else
[[ "$progdir" = "$fullprog" ]] && progdir="."
cwd=$(pwd)
cd $(pwd)/$progdir
fullprogdir=$(pwd)
cd $cwd
typeset -r fullprogdir=$fullprogdir
fi
typeset -r fullprog="$fullprogdir/$prog"
typeset -r progdir=$progdir
typeset -r progdirname=$(basename $fullprogdir)
typeset -r flags="hRru"
typeset -r getoptflags=":${flags}f:C:\?"
typeset -r numpositional=0
if [[ "$TMPDIR" != "" ]]; then
typeset -r tmpdir="$TMPDIR"
elif [[ -d /usr/var/tmp ]]; then
typeset -r tmpdir="/usr/var/tmp"
else
typeset -r tmpdir="/tmp"
fi
typeset -r tmp=$tmpdir/$prog.$$
cleanuplist="$tmp"
typeset -r SigList="INT QUIT TERM HUP"
typeset errexit=0
trap "trap - EXIT $SigList; CleanUp" EXIT
trap exit $SigList
# include this at beginning of each function as well
if [ "$DEBUG" ] ; then set -$DEBUG ; : Debug enabled by envariable ; fi
Usage () {
echo "Usage: $prog [-r] [-f tmp_dir] [-C CD_dir]"
echo " $prog -u [-f tmp_dir]"
echo " $prog -R [-f tmp_dir]"
echo " $prog -h\n"
echo " -h Help text (this stuff)."
echo " -r Remove $dtdir directory when $prog finishes."
echo " -R Just remove $dtdir directory."
echo " -u Just create $dtdir directory."
echo " -f tmp_dir Possible directory to hold $dtdir."
echo " -C CD_dir Directory of CD to be viewed."
}
Exit() {
[ "$1" ] && echo "$*" >&2
errexit=1
exit
}
UsageExit() {
[ "$1" ] && echo "$*" >&2
Usage >&2
Exit
}
Log () {
[[ "$verbose" = yes ]] && echo >&2 "$@"
}
Do () {
[[ ! -z "$verbose" || ! -z "$noexecute" ]] && echo >&2 "$@"
[[ -z "$noexecute" ]] && "$@"
typeset evalstatus=$?
[[ ! -z "$noexecute" || $evalstatus = 0 ]]
}
DoExit () {
Do $1 || Exit "$2"
}
DoUsageExit () {
Do $1 || UsageExit "$2"
}
CleanUp () {
: Add your own clean-up actions here
eval /bin/rm -fr $cleanuplist
exit $errexit
}
# Setexecutable variable_to_set executable absolute_path
# also looks in same place this code came from
SetExecutable () {
set -$DEBUG
typeset executable
executable=$(whence $2)
if [ "$executable" = "''" ] ; then
executable=$(whence $progdir/$2)
if [ "$executable" = "''" ] ; then
executable=$3
fi
fi
[ -x $executable ] || return 1
# this strips leading ././* to single ./
# [ "$( echo $executable | sed -e 's%^\./.*%%')" = "" ] &&
# executable="./${executable##*(./)}"
eval $1=\""$executable"\"
return 0
}
SetExecExit () {
set -$DEBUG
SetExecutable $1 $2 $3 ||
Exit "Unable to locate $2 for execution"
}
unset verbose noexecute removeDT DTUdir_list justload justrm CD_dir
while getopts ${getoptflags} flag; do
case $flag in
f)
DTUdir_list="$DTUdir_list $OPTARG"
;;
h | \?)
Usage >&2
exit
;;
u)
justload=-u
;;
r)
removeDT=-r
;;
R)
justrm=-R
;;
C)
CD_dir="$OPTARG"
;;
esac
done
shift OPTIND-1
if (( $# != $numpositional )) ; then
Usage >&2
Exit
fi
#functions
###############################################################################
addList() {
typeset list=$1 new=$2
[[ "$list" = "" ]] && list=" "
[[ "$list" != *" $new "* ]] && list="$list$new "
echo "$list"
}
localSpace() {
typeset -i isfound
typeset dir=$1 free
[[ "$dir" = "" || ! -d $dir || ! -w $dir ]] && return 1
/bin/df -k $dir | tail +2 | read _ _ _ _ free _
if ((util_size < free)); then
DTUdir=$dir
DT_util=$dir/$dtdir
return 0
else
nospace_list=$(addList "$nospace_list" $dir)
return 1
fi
}
make_dirlist() {
typeset device dir alt_dirlist=""
[[ "$DTUdir_list" != "" ]] && dirlist=$(addList "$dirlist" "$DTUdir_list")
dirlist=$(addList "$dirlist" "/usr/tmp")
alt_dirlist=$(addList "$alt_dirlist" "/usr")
dirlist=$(addList "$dirlist" "/var/tmp")
alt_dirlist=$(addList "$alt_dirlist" "/var")
cat /etc/mtab | while read device dir _; do
[[ "$device" != "/"* ]] && continue
[[ "$dir" = "/" ]] && continue
[[ "$dir" = "/dev/fd" ]] && continue
[[ "$dir" = "/proc" ]] && continue
dirlist=$(addList "$dirlist" $dir/tmp)
alt_dirlist=$(addList "$alt_dirlist" $dir)
done
alt_dirlist=${alt_dirlist##*([ ])}
dirlist="$dirlist$alt_dirlist /tmp"
dirlist=${dirlist##*([ ])}
}
find_dtdir() {
typeset dlist="$1" dir
while [[ "$dlist" != "" ]]; do
dir=$dlist
dir=${dir%%[ ]*}
dlist=${dlist##*([! ])*([ ])}
if [[ -d $dir/$dtdir ]]; then
DTUdir=$dir
DT_util=$dir/$dtdir
return 0
fi
done
return 1
}
enumerate() {
typeset list="$1" either="$2" or="$3" word newlist last
list=${list##*([ ])}
list=${list%%*([ ])}
word=${list%%[ ]*}
list=${list##*([! ])*( )}
newlist="$word"
if [[ "$list" != "" ]]; then
newlist="$either $word"
last=${list##*[ ]}
list=${list%%*( )*([! ])}
while [[ "$list" != "" ]]; do
word=$list
word=${word%%[ ]*}
newlist="$newlist, $word"
list=${list##*([! ])*( )}
done;
newlist="$newlist $or $last"
fi
echo "$newlist"
}
spaceCheck() {
typeset dirlist="$1" dlist dir last msg ret m0 m1 m2 m2 m4
dlist="$dirlist"
dirlist=""
while [[ "$dlist" != "" ]]; do
dir=$dlist
dir=${dir%%[ ]*}
dlist=${dlist##*([! ])*([ ])}
[[ "$dir" = "" || ! -d $dir || ! -w $dir ]] && continue
dirlist="$dirlist $dir"
done
dlist=${dirlist##*([ ])}
while [[ "$dlist" != "" ]]; do
dir=${dlist%%[ ]*}
dlist=${dlist##*([! ])*([ ])}
localSpace $dir && break
nospace_list="$nospace_list $dir"
done
if [[ "$DTUdir" != "" ]]; then
msg="The janitor plans to copy $util_size Kbytes to $DT_util.\n\
These are utilities necessary to view toolbox CDs."
if [[ "$nospace_list" != "" ]]; then
list=$(enumerate "$nospace_list" "either" "or")
msg="${msg}\nNo space was found on $list"
fi
msg="${msg}\nIf you wish to select a different location for \
these utilities,\n\
then press No and re-run $prog with the -f option\n\n\
Ready to copy $util_size Kbytes to $DT_util?"
ret=$($DT_xconfirm yesno "$msg")
[[ "$ret" = "No" ]] && exit
return 0
fi
list=$(enumerate "$nospace_list" "either" "or")
$DT_xconfirm warn "The janitor needed to copy $util_size Kbytes of\
utilities\n\
to your local disk in order to view these toolbox CDs.\n\
No space was found on $list\n\
Please re-run $prog with the -f option\n\
to select a suitable location for these utilities."
exit 1
}
cp_one() {
typeset pat="$1"
cp -r $pat .
if (( $? )); then
$DT_xconfirm error "Unable to copy\n\
local Developer Toolbox $prog directory"
exit 1
fi
}
cp_DT_Utilities() {
export DT_util_state=3
spaceCheck "$dirlist"
mkdir $DT_util
cd $DT_util
cp_one $CDROM_ROOT/.DT_Version
cp_one $CDROM_ROOT/bin
mv bin/* .
rm -rf bin
rm linkChunks
cp_one $CDROM_ROOT/toolbox/www/cgi-bin
cp_one $CDROM_ROOT/toolbox/www/icons
cp_one $CDROM_ROOT/toolbox/www/conf
}
upgrade_DT_Utilities() {
export DT_util_state=2
echo "\nremoving outdated Toolbox utilities\n"
rm -rf $DT_util > /dev/null 2>&1
cp_DT_Utilities
}
#start
###############################################################################
DT_xconfirm="$fullprogdir/DT_xconfirm"
fullprogdirdir=$(dirname $fullprogdir)
# See whether running from CDROM or DT_utilities
if [[ -d $fullprogdirdir/toolbox ]]; then
unset DTUdir DT_util
if [[ "$CD_dir" = "" ]]; then
export CDROM_ROOT=$fullprogdirdir
else
if [[ ! -d $CD_dir/toolbox ]]; then
$DT_xconfirm error "The -C option directory ($CD_dir)\n\
is not a valid Developer Toolbox CD directory"
exit 1
fi
export CDROM_ROOT="$CD_dir"
fi
elif [[ -f $fullprogdir/.DT_Version ]]; then
if [[ "$justrm" != "" ]]; then
rm -rf $progdir
echo "\nremoving Toolbox utilities\n"
exit 0
fi
if [[ "$CD_dir" = "" ]]; then
$DT_xconfirm error "You must use the -C option when running\n\
$prog from $fullprogdir"
exit 1
fi
if [[ ! -d $CD_dir/toolbox ]]; then
$DT_xconfirm error "The -C option directory ($CD_dir)\n\
is not a valid Developer Toolbox CD directory"
exit 1
fi
DTUdir=$fullprogdirdir
DT_util=$fullprogdir
export CDROM_ROOT="$CD_dir"
else
$DT_xconfirm error "You must run $prog from\n\
a Developer Toolbox CD directory\n\
or from a DT_utilities directory with the -C option"
exit 1
fi
typeset -i util_size
typeset -i getdir=1 free CD_version DTU_version
unset nospace_list dirlist
# find/make/update DT_utilities
make_dirlist
if find_dtdir "$dirlist"; then
if [[ "$justrm" != "" ]]; then
rm -rf $DT_util
echo "\nremoving Toolbox utilities\n"
exit 0
fi
[[ -f $CDROM_ROOT/.DT_Size ]] && util_size=`cat $CDROM_ROOT/.DT_Size`
CDVfile="$CDROM_ROOT/.DT_Version"
DTVfile="$DT_util/.DT_Version"
CD_version=$(head -1 $CDVfile 2> /dev/null)
DTU_version=$(head -1 $DTVfile 2> /dev/null)
if [[ -f $DTVfile ]] ; then
if ((DTU_version<CD_version)); then
upgrade_DT_Utilities
else
export DT_util_state=1
cd $DTUdir > /dev/null 2>&1
fi
else
upgrade_DT_Utilities
fi
else
if [[ "$justrm" != "" ]]; then
echo "\nno Toolbox utilities to remove\n"
exit 1
fi
[[ -f $CDROM_ROOT/.DT_Size ]] && util_size=`cat $CDROM_ROOT/.DT_Size`
cp_DT_Utilities
fi
[[ "$justload" != "" ]] && exit 0
if [[ "$removeDT" = "" ]]; then
exec $DT_util/runDT
else
exec $DT_util/runDT $DT_util
fi
# Emacs exit, stops shell from parsing sh-mode
exit
# Local variables:
# eval: (if (fboundp 'sh-mode) (sh-mode))
# end: